/**
 * @file bsp_gpio.c
 * @author 何传喜
 * @brief GPIO 操作文件
 * @version 0.1
 * @date 2023-08-31
 * 
 * @copyright Copyright (c) 2023
 * 
 */
#include "bsp_gpio.h"

/**
 * @brief GPIO 初始化
 * 
 * @param base 要初始化的 GPIO 组
 * @param pin 要初始化 GPIO 在组内的编号
 * @param config GPIO 配置结构体
 * @return 无
 */
void gpio_init(GPIO_Type *base, int pin, gpio_pin_config_t *config)
{
    if (config->direction == kGPIO_DigitalInput) { /* 输入 */
        base->GDIR &= ~(1<<pin);
    } else { /* 输出 */
        base->GDIR |= (1<<pin);
        gpio_pinwrite(base, pin, config->outputLogic);
    }
}

/**
 * @brief 读取指定 GPIO 的电平值
 * 
 * @param base 要读取的 GPIO 组
 * @param pin 要读取的 GPIO 引脚号
 * @return int 读取的电平值
 */
int gpio_pinread(GPIO_Type *base, int pin)
{
    return (((base->DR) >> pin) & 0x1);
}

/**
 * @brief 指定 GPIO 输出高或者低电平
 * 
 * @param base 要输出的 GPIO 组
 * @param pin 要输出的 GPIO 引脚号
 * @param value 要输出的电平。1，输出高；0，输出低
 * @return 无
 */
void gpio_pinwrite(GPIO_Type *base, int pin, int value)
{
    
}
